﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using Terrae.Clases;
using Terrae.GUI.Contrato;
using Terrae.Logica.Comandos;
using Terrae.Logica.FabricaLogica;
using Terrae.Clases.FabricaClase;

namespace Terrae.GUI.Presentador
{
    public class PresentadorCVActual
    {
        #region Atributos

        /// <summary>
        /// Instancia del ContratoCVActual para acceder a la vista.
        /// </summary>
        private IContratoCVActual _contrato;
        List<string> _variable = new List<string>();
        private Entidad _invernadero = FabricaEntidad.NuevoInvernadero();
        private List<Entidad> _variables = new List<Entidad>();
        private Comando<Entidad> _comandoI;
        private Label tituloPestaña;
        private Table tablaMedida;
        TableRow fila;
        private AjaxControlToolkit.AccordionPane panel;
        private TableHeaderRow tituloTabla;

        #endregion Atributos

        #region Constructor

        /// <summary>
        /// Constrauctor del presentador CVActual.
        /// </summary>
        /// <param name="contrato"></param>
        public PresentadorCVActual(IContratoCVActual contrato)
        {
            _contrato = contrato;
        }

        #endregion Constructor

        #region Método

        #region Llenar Variables

        /// <summary>
        /// Método que llena la lista con las 
        /// variables a medir en el invernadero.
        /// </summary>
        public void LlenarVariable()
        {
            _variable.Add("Temperatura");
            _variable.Add("Humedad");
            _variable.Add("Luminosidad");
            _variable.Add("Acidez");
        }

        #endregion Llenar Variables

        #region Pintar Acordeon

        /// <summary>
        /// Método que pinta el acordeon con las variables
        /// (Temperatura, humedad, luminosidad y acides).
        /// </summary>
        public void PintarAcordion(Entidad _inver)
        {
            LlenarVariable();
            _invernadero = FabricaEntidad.NuevoInvernadero();
            (_invernadero as Invernadero).Acides = (Acides)FabricaEntidad.NuevaAcidez();
            (_invernadero as Invernadero).Humedad = (Humedad)FabricaEntidad.NuevaHumedad();
            (_invernadero as Invernadero).Luminosidad = (Luminosidad)FabricaEntidad.NuevaLuminosidad();
            (_invernadero as Invernadero).Temperatura = (Temperatura)FabricaEntidad.NuevaTemperatura();
            
            for (int i = 0; i < 4; i++)
            {
                tituloPestaña = new Label();
                tablaMedida = new Table();
                tituloPestaña.Text = _variable[i];
                // Definición del Panel del Acordion.
                panel = new AjaxControlToolkit.AccordionPane();
                panel.ID = _variable[i];
                panel.HeaderContainer.Controls.Add(tituloPestaña);

                tituloTabla = new TableHeaderRow();
                TableHeaderCell tc1 = new TableHeaderCell();
                tc1.Text = "Medición";
                tituloTabla.Controls.Add(tc1);
                tablaMedida.Controls.Add(tituloTabla);

                if ((_inver as Invernadero).Humedad.Nombre == _variable[i])
                {
                    tablaMedida.CssClass = "humedad";
                    fila = new TableRow();
                    //Creando celda medicion.
                    TableCell celdaMedicion = new TableCell();
                    Label medicion = new Label();
                    medicion.Text = (_inver as Invernadero).Humedad.Medicion + " g/m3";
                    celdaMedicion.Controls.Add(medicion);
                    fila.Cells.Add(celdaMedicion);
                    tablaMedida.Rows.Add(fila);
                    panel.ContentContainer.Controls.Add(tablaMedida);
                }

                if ((_inver as Invernadero).Acides.Nombre == _variable[i])
                {
                    tablaMedida.CssClass = "acidez";
                    fila = new TableRow();
                    //Creando celda medicion.
                    TableCell celdaMedicion = new TableCell();
                    Label medicion = new Label();
                    medicion.Text = (_inver as Invernadero).Acides.Medicion + " Ph";
                    celdaMedicion.Controls.Add(medicion);
                    fila.Cells.Add(celdaMedicion);
                    tablaMedida.Rows.Add(fila);
                    panel.ContentContainer.Controls.Add(tablaMedida);
                }

                if ((_inver as Invernadero).Luminosidad.Nombre == _variable[i])
                {
                    tablaMedida.CssClass = "luminosidad";
                    fila = new TableRow();
                    //Creando celda medicion.
                    TableCell celdaMedicion = new TableCell();
                    Label medicion = new Label();
                    medicion.Text = (_inver as Invernadero).Luminosidad.Medicion + " lm";
                    celdaMedicion.Controls.Add(medicion);
                    fila.Cells.Add(celdaMedicion);
                    tablaMedida.Rows.Add(fila);
                    panel.ContentContainer.Controls.Add(tablaMedida);
                }

                if ((_inver as Invernadero).Temperatura.Nombre == _variable[i])
                {
                    tablaMedida.CssClass = "temperatura";
                    fila = new TableRow();
                    //Creando celda medicion.
                    TableCell celdaMedicion = new TableCell();
                    Label medicion = new Label();
                    medicion.Text = (_inver as Invernadero).Temperatura.Medicion + " °C";
                    celdaMedicion.Controls.Add(medicion);
                    fila.Cells.Add(celdaMedicion);
                    tablaMedida.Rows.Add(fila);
                    panel.ContentContainer.Controls.Add(tablaMedida);
                }
                _contrato.Acordion.Panes.Add(panel);
                _contrato.Acordion.DataBind();
            }
        }

        #endregion Pintar Acordeon

        #region Consultar Variables

        /// <summary>
        /// Método que llama al comando para consultar las variables
        /// actuales del invernadero.
        /// </summary>
        public void ConsultarVariables()
        {
            int id =  Convert.ToInt32(_contrato.Sesion["IdInv"]);
            (_invernadero as Invernadero).Id = id;

            _comandoI = FabricaComando.CrearComandoConsultarVariable(_invernadero);
            PintarAcordion(_comandoI.Ejecutar());
        }

        #endregion Consultar Variables

        #endregion Método
    }
}